package com.spring.demo3;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.PreparedStatement;

/**
 * @author:liuwei
 * @creatdate:2021-07-15-10:44
 */
//使用这个类，自动生成代理类
public class PorxyInvocationHandler implements InvocationHandler  {
	//被代理的接口
	private Rent rent;

	public void setRent(Rent rent) {
		this.rent = rent;
	}

	//生成代理类，重点是第二个参数，获取要代理的抽象角色！之前都是一个角色，现在可以代理一类角色
	public Object getProxy(){
		return Proxy.newProxyInstance(this.getClass().getClassLoader(),
				rent.getClass().getInterfaces(),this);
	}
	@Override
	// proxy : 代理类 method : 代理类的调用处理程序的方法对象.
	// 处理代理实例上的方法调用并返回结果
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		this.seeHouse();
		//动态代理的本质就是使用反射机制实现
		Object invoke = method.invoke(rent, args);
		this.fare();
		return invoke;
	}
	public void seeHouse(){
		System.out.println("中介在看房子");
	}
	public void fare(){
		System.out.println("收中介费");
	}
}
